package cn.tedu.search.repository;

import cn.tedu.search.entity.Item;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

//Spring框架下持久层名称都为repository
@Repository
public interface ItemRepository extends ElasticsearchRepository<Item,Long>  {
    //ElasticsearchRepository接口中包含了很多增删改查方法
    //只需要指定我们操作的实体类,就会自动生成它们,让我们使用
    //指定的方式是: ElasticsearchRepository<实体类名,实体类主键类型>





    //SpringData框架自定义查询
    //直接按照SpringData规定的格式编写方法名,无论是数据库还是ES查询逻辑代码会自动生成
    //query:表示这是一个查询语句,类似SQL的select
    //Item/Items:表示查询的实体类型,带s返回集合
    //By:开始设置条件的标识,类似SQL的where
    //TItle:是要查询的列名
    Iterable<Item> queryItemsByTitleMatches(String title);


    //多条件查询
    //多个条件直接使用and/or进行逻辑表达
    Iterable<Item> queryItemsByTitleMatchesAndBrandMatches(String title,String brand);


    //排序查询 desc降序查询,asc
    Iterable<Item> queryItemsByTitleMatchesOrBrandMatchesOrderByPriceDesc(String title,String brand);

    //分页查询
    // Pageable这个参数包含分页的要求
    //返回值Page,包含分页信息
    Page<Item> queryItemsByTitleMatchesOrBrandMatchesOrderByPriceDesc(String title, String brand, Pageable pageable);

}
